#ifndef REPORTGENERATOR_H
#define REPORTGENERATOR_H
#include <AnalyzerSettings.h>
#include <AnalyzerTypes.h>

class HD44780AnalyzerResults;
class HD44780AnalyzerSettings;
class ReportGenerator
{
public:
    ReportGenerator( HD44780AnalyzerResults* Parent, HD44780AnalyzerSettings* Settings ) : mParent(Parent), mSettings(Settings) { }
    virtual ~ReportGenerator() {}
    virtual void GenerateReport( const char* TargetFile, DisplayBase TargetDisplayBase ) = 0;
protected:
    HD44780AnalyzerResults*     mParent;
    HD44780AnalyzerSettings*    mSettings;
protected:
    HD44780AnalyzerResults* GetParent()     { return mParent;   }
    HD44780AnalyzerSettings* GetSettings()  { return mSettings; }
};

class CSVReportGenerator : public ReportGenerator
{
public:
    CSVReportGenerator( HD44780AnalyzerResults* Parent, HD44780AnalyzerSettings* Settings ) : ReportGenerator(Parent, Settings) { }
    virtual ~CSVReportGenerator() {}
    virtual void GenerateReport( const char* TargetFile, DisplayBase TargetDisplayBase );
};

class SequenceDiagramReportGenerator : public ReportGenerator
{
public:
    SequenceDiagramReportGenerator( HD44780AnalyzerResults* Parent, HD44780AnalyzerSettings* Settings ) : ReportGenerator(Parent, Settings) { }
    virtual ~SequenceDiagramReportGenerator() {}
    virtual void GenerateReport( const char* TargetFile, DisplayBase TargetDisplayBase );
};

class HTMLReportGenerator : public ReportGenerator
{
public:
    HTMLReportGenerator( HD44780AnalyzerResults* Parent, HD44780AnalyzerSettings* Settings ) : ReportGenerator(Parent, Settings) { }
    virtual ~HTMLReportGenerator() {}
    virtual void GenerateReport( const char* TargetFile, DisplayBase TargetDisplayBase );
};

#endif